&:focus .login-dialog-timed-login-indicator { background-color: $selected_fg_color; }
}
-.login-dialog-username,
.user-widget-label {
color: $osd_fg_color;
+}
+
+.user-widget.horizontal .user-widget-label {
@include fontsize($base_font_size + 2);
font-weight: bold;
text-align: left;
padding-left: 15px;
-}
-.user-widget-label {
&:ltr { padding-left: 14px; }
&:rtl { padding-right: 14px; }
}
+.user-widget.vertical .user-widget-label {
+ @include fontsize($base_font_size + 5);
+ text-align: center;
+ font-weight: normal;
+ padding-top: 16px;
+}
+
.login-dialog-prompt-layout {
padding-top: 24px;
padding-bottom: 12px;
color: darken($osd_fg_color,30%);
&:hover,&:focus { color: $osd_fg_color; }
&:active { color: darken($osd_fg_color, 50%); }
-}
\ No newline at end of file
+}
const Params = imports.misc.params;
+const UNKNOWN_AVATAR_ICON_SIZE = -1;
var AVATAR_ICON_SIZE = 64;
// Adapted from gdm/gui/user-switch-applet/applet.c
class Avatar extends St.Bin {
_init(user, params) {
let themeContext = St.ThemeContext.get_for_stage(global.stage);
- params = Params.parse(params, { reactive: false,
- iconSize: AVATAR_ICON_SIZE,
- styleClass: 'user-icon' });
+ params = Params.parse(params, {
+ styleClass: 'user-icon',
+ reactive: false,
+ iconSize: UNKNOWN_AVATAR_ICON_SIZE,
+ });
super._init({
style_class: params.styleClass,
this.connect('destroy', this._onDestroy.bind(this));
}
+ vfunc_style_changed() {
+ super.vfunc_style_changed();
+
+ let node = this.get_theme_node();
+ let [found, iconSize] = node.lookup_length('icon-size', false);
+
+ if (!found)
+ return;
+
+ let themeContext = St.ThemeContext.get_for_stage(global.stage);
+
+ // node.lookup_length() returns a scaled value, but we
+ // need unscaled
+ this._iconSize = iconSize / themeContext.scaleFactor;
+ this.update();
+ }
+
_onDestroy() {
if (this._scaleFactorChangeId) {
let themeContext = St.ThemeContext.get_for_stage(global.stage);
}
}
+ _getIconSize() {
+ if (this._iconSize !== UNKNOWN_AVATAR_ICON_SIZE)
+ return this._iconSize;
+ else
+ return AVATAR_ICON_SIZE;
+ }
+
setSensitive(sensitive) {
this.reactive = sensitive;
}
update() {
+ let iconSize = this._getIconSize();
+
let iconFile = this._user.get_icon_file();
if (iconFile && !GLib.file_test(iconFile, GLib.FileTest.EXISTS))
iconFile = null;
if (iconFile) {
this.child = null;
+
let { scaleFactor } = St.ThemeContext.get_for_stage(global.stage);
this.set_size(
- this._iconSize * scaleFactor,
- this._iconSize * scaleFactor);
+ iconSize * scaleFactor,
+ iconSize * scaleFactor);
this.style = `
background-image: url("${iconFile}");
background-size: cover;`;
} else {
this.style = null;
- this.child = new St.Icon({ icon_name: 'avatar-default-symbolic',
- icon_size: this._iconSize });
+ this.child = new St.Icon({
+ icon_name: 'avatar-default-symbolic',
+ icon_size: iconSize,
+ });
}
}
});
var UserWidget = GObject.registerClass(
class UserWidget extends St.BoxLayout {
- _init(user) {
- super._init({ style_class: 'user-widget', vertical: false });
-
+ _init(user, orientation = Clutter.Orientation.HORIZONTAL) {
this._user = user;
+ let vertical = orientation == Clutter.Orientation.VERTICAL;
+ let xAlign = vertical ? Clutter.ActorAlign.CENTER : Clutter.ActorAlign.START;
+ let styleClass = vertical ? 'user-widget vertical' : 'user-widget horizontal';
+
+ super._init({
+ styleClass,
+ vertical,
+ xAlign,
+ });
+
this.connect('destroy', this._onDestroy.bind(this));
this._avatar = new Avatar(user);
+ this._avatar.x_align = Clutter.ActorAlign.CENTER;
this.add_child(this._avatar);
this._label = new UserWidgetLabel(user);